'''
项目：普通函数算法
版本：1.0
日期：2020/2/3
作者：林靖和
功能：用普通函数算法实现特定函数（实现基本算法）
      1、map函数（功能：对每一个数据执行相同的函数操作）
      2、reduce函数（功能：对所有数据依次执行函数操作）
      3、filter函数（功能：选择出符合判断条件的数据）
'''
from functools import reduce
from collections.abc import Iterable
def main():
    data = range(21)#生成需要被处理的数据列表
    if isinstance(data,Iterable):
        print("part1:map函数")
        print("使用map函数结果：")
        print(list(map(lambda x: x*x,data)))#map函数:[a,b,c]->[a*a,b*b,c*c]
        print(list(map(str, data)))  # map函数:[a,b,c]->[str(a),str(b),str(c)]
        print("使用普通函数结果：")
        new_data = []
        for i in range(len(data)):
            new_data.append(data[i]**2)
        print(new_data)
        new_data = []
        for i in range(len(data)):
            new_data.append(str(data[i]))
        print(new_data)
        print("part2:reduce函数")
        print(reduce(lambda x,y: x+y,data))#reduce函数:[a,b,c,d]->((a+b)+c)+d
        print("使用普通函数结果：")
        if len(data) == 1:
            add = data[0]
        elif len(data) == 2:
            add = data[0]+data[1]
        else:
            add = data[0] + data[1]
            for i in range(2,len(data)):
                add = add+data[i]
        print(add)
        print("part3:filter函数")
        print(list(filter(lambda x: x % 2 == 1,data)))#reduce函数:[a,b,c]->[符合条件的数]
        print("使用普通函数结果：")
        new_data = []
        for i in range(len(data)):
            if data[i] % 2 == 1:
                new_data.append(data[i])
        print(new_data)
    else:
        print("data not is Iterable")
if __name__ == '__main__':
    main()
